### プロジェクト5 レインボーアンビエントライト **1. 説明** Arduino 2812RGB LEDは、色、明るさ、リズムを調整可能なプログラム可能なカラフルで夢のようなライトです。このレインボーアンビエントライトは、動的な装飾として自由に使用できます。また、「音楽に合わせて踊る」ように制御することも可能です。重要なのは、アラームとしても改良できる点です。内蔵センサーが周囲環境を検知し、色、明るさ、リズムを変化させてユーザーに警告します。 **2. 動作原理** ![](media/A22.png) データプロトコルは、単一線のリターン・トゥ・ゼロコードの通信モードを採用しています。電源投入時にピクセルがリセットされると、DIN端子がコントローラーからデータを受信します。最初に到着した24ビットのデータは最初のピクセルによって抽出され、内部データレジスタに送られます。 残りのデータは増幅回路によって増幅され、DOUTポートを通じて次のカスケードされたピクセルに送信されます。ピクセルを通過するごとに信号は24ビットずつ減少します。 さらに、ピクセルは自動整形および転送技術を採用しているため、ピクセルのカスケード数は信号伝送速度によってのみ制限されます。 **3. 配線図** ![](media/A23.png) **4. テストコード** ``` /* keyestudio ESP32 Inventor Learning Kit Project 5.1 Rainbow Ambient Light http://www.keyestudio.com */ //Add 2812RGB library file #include #define PIN 15 Adafruit_NeoPixel strip = Adafruit_NeoPixel(6, PIN); //Defines the instance strip and assigns the RGB LED number pins to the library code void setup() { strip.begin(); //Activate RGB LED strip.show(); // Refresh the display } void loop() { strip.setPixelColor(0, strip.Color(255, 0, 0)); //The frist RGB LED is red strip.setPixelColor(1, strip.Color(0, 255, 0)); //The second RGB LED is green strip.setPixelColor(2, strip.Color(0, 0, 255)); //The third RGB LED is blue strip.setPixelColor(3, strip.Color(255, 255, 0)); //The fourth RGB LED is yellow strip.setPixelColor(4, strip.Color(255, 0, 255)); //The fifth RGB LED is purple strip.setPixelColor(5, strip.Color(255, 255, 255)); //The sixth RGB LED is white strip.show(); //Refresh the display delay(100); //Give a delay to save the stability of the display } ``` **5. テスト結果** コードをアップロードして電源を入れると、LEDが異なる色で点灯します。 左から右へ: - 1番目のRGB LEDは赤色 - 2番目のRGB LEDは緑色 - 3番目のRGB LEDは青色 - 4番目のRGB LEDは黄色 - 5番目のRGB LEDは紫色 - 6番目のRGB LEDは白色 ![](media/A24.png) **6. 拡張コード** ``` /* keyestudio ESP32 Inventor Learning Kit Project 5.2 Rainbow Ambient Light http://www.keyestudio.com */ //Add 2812RGB library file #include #define PIN 15 Adafruit_NeoPixel strip = Adafruit_NeoPixel(6, PIN, NEO_GRB + NEO_KHZ800); void setup() { strip.begin(); strip.show(); // Initialize all pixels to 'off' } void loop() { // Some example procedures showing how to display to the pixels: colorWipe(strip.Color(255, 0, 0), 50); // Red colorWipe(strip.Color(0, 255, 0), 50); // Green colorWipe(strip.Color(0, 0, 255), 50); // Blue // Send a theater pixel chase in... theaterChase(strip.Color(127, 127, 127), 50); // White theaterChase(strip.Color(127, 0, 0), 50); // Red theaterChase(strip.Color( 0, 0, 127), 50); // Blue rainbow(20); rainbowCycle(20); theaterChaseRainbow(50); } // Fill the dots one after the other with a color void colorWipe(uint32_t c, uint8_t wait) { for(uint16_t i=0; i